home *** CD-ROM | disk | FTP | other *** search
Wrap
/* rgb(147, 174, 229) hsl(220, 61%, 74%) #FFDA75 rgb(255, 218, 117) hsl(44, 100%, 73%) #FFDA75 rgb(188, 204, 157) hsl(80, 32%, 71%) #BCCC9D rgb(239, 157, 159) hsl(359, 72%, 78%) #EF9D9F rgb(186, 167, 225) hsl(260, 49%, 77%) #BAA7E1 rgb(155, 191, 180) hsl(162, 22%, 68%) #9BBFB4 rgb(247, 180, 130) hsl(26, 88%, 74%) #F7B482 rgb(216, 171, 192) hsl(332, 37%, 76%) #D8ABC0 rgb(147, 229, 174) hsl(140, 61%, 74%) #93E5AE rgb(255, 117, 218) hsl(316, 100%, 73%) #FF75DA rgb(188, 157, 204) hsl(280, 32%, 71%) #BC9DCC rgb(239, 159, 157) hsl(1, 72%, 78%) #EF9F9D rgb(186, 225, 167) hsl(100, 49%, 77%) #BAE1A7 rgb(155, 180, 191) hsl(198, 22%, 68%) #9BB4BF rgb(247, 130, 180) hsl(334, 88%, 74%) #F782B4 rgb(216, 192, 171) hsl(28, 37%, 76%) #D8C0AB rgb(174, 147, 229) hsl(260, 61%, 74%) #AE93E5 rgb(218, 255, 117) hsl(76, 100%, 73%) #DAFF75 rgb(204, 188, 157) hsl(40, 32%, 71%) #CCBC9D rgb(157, 239, 159) hsl(121, 72%, 78%) #9DEF9F rgb(167, 186, 225) hsl(220, 49%, 77%) #A7BAE1 rgb(191, 155, 180) hsl(318, 22%, 68%) #BF9BB4 rgb(180, 247, 130) hsl(94, 88%, 74%) #B4F782 rgb(171, 216, 192) hsl(148, 37%, 76%) #ABD8C0 rgb(229, 174, 147) hsl(20, 61%, 74%) #E5AE93 rgb(117, 218, 255) hsl(196, 100%, 73%) #75DAFF rgb(157, 204, 188) hsl(160, 32%, 71%) #9DCCBC rgb(159, 157, 239) hsl(241, 72%, 78%) #9F9DEF rgb(225, 167, 186) hsl(340, 49%, 77%) #E1A7BA rgb(180, 191, 155) hsl(7%, 22%, 68%) #B4BF9B rgb(130, 180, 247) hsl(214, 88%, 74%) #82B4F7 rgb(192, 171, 216) hsl(268, 37%, 76%) #C0ABD8 x,22-100,68-78 x,61,73 */ var ct = { tabColors: ['rgb(147, 174, 229)','rgb(255, 218, 117)','rgb(188, 204, 157)','rgb(239, 157, 159)','rgb(186, 167, 225)','rgb(155, 191, 180)','rgb(247, 180, 130)','rgb(216, 171, 192)','rgb(147, 229, 174)','rgb(255, 117, 218)','rgb(188, 157, 204)','rgb(239, 159, 157)','rgb(186, 225, 167)','rgb(155, 180, 191)','rgb(247, 130, 180)','rgb(216, 192, 171)','rgb(174, 147, 229)','rgb(218, 255, 117)','rgb(204, 188, 157)','rgb(157, 239, 159)','rgb(167, 186, 225)','rgb(191, 155, 180)','rgb(180, 247, 130)','rgb(171, 216, 192)','rgb(229, 174, 147)','rgb(117, 218, 255)','rgb(157, 204, 188)','rgb(159, 157, 239)','rgb(225, 167, 186)','rgb(180, 191, 155)','rgb(130, 180, 247)','rgb(192, 171, 216)'], newVersion:null,//version of the version being installed ctVersion:null,//version of the currently installed version fadedeg:null,//variable 'fadedeg' tracks fade degree starting 0 to 9 translates to mozopacity 0 to 1 **some explaination mising**. scheme:null,//the coloring scheme viz. fixed pallette, random, domain based, manual only - 0,1,2,3 res. clr:0,//tracks the tab color when using fixed pallette isSeamonkey:'', isFlock:'', clrSession:window.navigator.userAgent.toLowerCase().indexOf('seamonkey')>=0?Components.classes["@mozilla.org/suite/sessionstore;1"].getService(Components.interfaces.nsISessionStore):Components.classes["@mozilla.org/browser/sessionstore;1"].getService(Components.interfaces.nsISessionStore), adv:null,//advanced pref enabled?1:0; satmax:null,//max saturation satmin:null,//min saturation lummax:null,//max luminance lummin:null,//min luminance sat:null,//saturation of domain based coloring lum:null,//luminance of domain based coloring txtreverse:null,//reversing of the tabs' text-color enabledomain:null,//enable domain presets?1:0 dpref:null,//domain-color combo prefs ctdebug:0,//enable message dump to console?1:0 colorunmatcheddomain:null,//color unmatched domains?1:0 - currently unused clrtabsInit: function() { ct.cl(window.navigator.userAgent); isFlock=(window.navigator.userAgent.toLowerCase().indexOf('flock')>=0)?true:false; if(isFlock) { document.getElementById('main-window').className=document.getElementById('main-window').className+" flock"; } ct.isSeamonkey = (window.navigator.userAgent.toLowerCase().indexOf('seamonkey')>=0)?true:false, ct.setCtPref(); var ctEM = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager); var ctAddon = ctEM.getItemForID("{0545b830-f0aa-4d7e-8820-50a4629a56fe}"); ct.newVersion = ctAddon.version; if(ct.ctVersion != ct.newVersion) { if(window.navigator.onLine) { Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).setCharPref("extensions.clrtabs.firstrun", ct.newVersion); gBrowser.addEventListener('load', ct.ctFirstRun, false); } else { } } ct.chkRestore(); gBrowser.addEventListener("SSTabRestoring",ct.restoreTabClr,false); gBrowser.addEventListener("TabOpen", ct.calcTabClr, false); gBrowser.addEventListener("TabMove", ct.getMovedTab, false); gBrowser.addEventListener("TabClose", ct.tabrem, false); gBrowser.addEventListener("TabSelect", ct.fadeAllTabs, false); gBrowser.mStrip.addEventListener("mouseover", ct.effectMouseIn, false); gBrowser.mStrip.addEventListener("mouseout", ct.effectMouseOut, false); ct.initTabcontext(); ct.showRecolor(); window.removeEventListener('load', ct.clrtabsInit, false); return; }, executeSoon: function(aFunc) { var tm = Components.classes["@mozilla.org/thread-manager;1"].getService(Components.interfaces.nsIThreadManager); tm.mainThread.dispatch( { run: function() { aFunc(); } }, Components.interfaces.nsIThread.DISPATCH_NORMAL); }, ctFirstRun: function() { ct.cl("running first run routine"); gBrowser.removeEventListener('load', ct.ctFirstRun, false); var clrUrl; clrUrl = 'http://colorfultabs.binaryturf.com/?v='+escape(ct.newVersion); //gBrowser.selectedTab = gBrowser.addTab(clrUrl); ct.executeSoon(function(){gBrowser.selectedTab = gBrowser.addTab(clrUrl); }); //alert(clrUrl); Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).setCharPref("extensions.clrtabs.firstrun", ct.newVersion); }, chkRestore: function() { var tab,tabClr; if(Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("browser.startup.page") !=3) { ct.cl("Opening Homepage(s)"); //we are opening the homepage(s). we are not restoring the session. var tabLen = gBrowser.mPanelContainer.childNodes.length; for(var tn=0;tn<tabLen;tn++) { tab = gBrowser.mTabContainer.childNodes[tn]; switch (ct.scheme) { case 0: if(ct.clrSession.getTabValue(tab,"ctreadonly") == 1) break; tabClr = ct.tabColors[ct.clr%32]; ct.setColor(tab,tabClr); ct.clr++; break; case 1: if(ct.clrSession.getTabValue(tab,"ctreadonly") == 1) break; var oldtabClr=ct.clrSession.getTabValue(tab,"tabClr" ); if(oldtabClr) { tabClr = oldtabClr; } else { clrSat = ct.clrRand(ct.satmin,ct.satmax); //for keeping saturation to match the old static template we need the saturation between 30 and 95;ideally could be min 30; add advanced prefs later clrLum = ct.clrRand(ct.lummin,ct.lummax); //for keeping saturation to match the old static template we need the luminance between 68 and 78 //tabClr ='hsl('+Math.abs(ct.clrHash(tab.getAttribute('linkedpanel').replace(/panel/,"")))%360+','+clrSat+'%,'+clrLum+'%)'; var randkey = parseInt(Math.random()*100000000000000).toString(); //generate a really random int tabClr ='hsl('+Math.abs(ct.clrHash(randkey))%360+','+clrSat+'%,'+clrLum+'%)'; ct.cl("linkedpanel:\t"+tab.getAttribute('linkedpanel')+"\t"+tabClr+"\t"+randkey); } ct.setColor(tab,tabClr); break; case 2: tab.linkedBrowser.addProgressListener(clrUrlListener, Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT); break; case 3:break; } } } else { ct.cl("Restoring Session"); ct.calcTabClr(); } }, resetTabClr :function() { var clrObj = document.popupNode; if(clrObj.className=='tabbrowser-tabs') { clrObj=gBrowser.selectedTab; } ct.setColor(clrObj, "-moz-dialog"); ct.clrSession.setTabValue(clrObj, "ctreadonly", 0); //ct.setTaBottomClr(); }, initTabcontext: function() { if(Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getBoolPref("extensions.clrtabs.menu").toString()=='true') { var clrMenu1 = document.createElement("menu"); clrMenu1.setAttribute("label","ColorfulTabs"); clrMenu1.setAttribute("id","ctTabCtx"); var clrMenu2 = document.createElement("menupopup"); clrMenu2.setAttribute("id","ctCtxPopup"); clrMenu1.appendChild(clrMenu2); var clrMenu3 = document.createElement("menuitem"); clrMenu3.addEventListener("command",ct.setUserClr,false); clrMenu3.setAttribute("label", "Tab Color"); clrMenu2.appendChild(clrMenu3); var clrMenu3a = document.createElement("menuitem"); clrMenu3a.addEventListener("command",ct.resetTabClr,false); clrMenu3a.setAttribute("label", "Reset Color"); clrMenu2.appendChild(clrMenu3a); var clrMenu4 = document.createElement("menuitem"); clrMenu4.addEventListener("command",ct.showOptions,false); clrMenu4.setAttribute("label", "Options"); clrMenu2.appendChild(clrMenu4); var ctSep = document.createElement("menuseparator"); ctSep.setAttribute('id','ctsep') window.getBrowser().mStrip.childNodes[1].appendChild(ctSep); window.getBrowser().mStrip.childNodes[1].appendChild(clrMenu1); } else { if(document.getElementById('ctsep')) try { var ctwm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var ctenumerator = ctwm.getEnumerator('navigator:browser'); var ctwin; var ctItem1,ctItem2,ctBrowser; while(ctenumerator.hasMoreElements()) { ctwin = ctenumerator.getNext(); ctItem1 = ctwin.document.getElementById('ctsep'); ctItem2 = ctwin.document.getElementById('ctTabCtx'); ctBrowser = ctwin.getBrowser(); ctBrowser.mStrip.childNodes[1].removeChild(ctItem1); ctBrowser.mStrip.childNodes[1].removeChild(ctItem2); } } catch(e){dump(e);return;} } }, showRecolor: function() { var showCtCtx = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getBoolPref("extensions.clrtabs.menu").toString(); if(!showCtCtx) return; if(ct.scheme == 1) //If the menu option has been turned on { //add the element var clrMenu2a = document.createElement("menuitem"); clrMenu2a.addEventListener("command",ct.regenClr,false); clrMenu2a.setAttribute("label", "Re-Color"); clrMenu2a.setAttribute("id", "ctRecol"); //clrMenu2a.setAttribute("modifiers", "shift"); clrMenu2a.setAttribute("key", "ctRecolor"); clrMenu2a.setAttribute("acceltext", "Alt+Shift+R"); document.getElementById('ctCtxPopup').appendChild(clrMenu2a); } else { //remove the element.... if(document.getElementById('ctCtxPopup')) try { var ctwm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); var ctenumerator = ctwm.getEnumerator('navigator:browser'); var ctwin; var ctItem1,ctBrowser; while(ctenumerator.hasMoreElements()) { ctwin = ctenumerator.getNext(); ctItem2 = ctwin.document.getElementById('ctCtxPopup'); ctBrowser = ctwin.getBrowser(); ctItem2.removeChild(document.getElementById('ctRecolor')); } } catch(e){ct.cl(e);return;} } }, regenClr: function() { //ct.cl("regenClr"); var clrObj; if(document.popupNode) { ct.cl(document.popupNode.nodeName); clrObj = document.popupNode; if(clrObj.nodeName!=('tab') && clrObj.nodeName != "xul:tab") clrObj = gBrowser.selectedTab; } else { clrObj = gBrowser.selectedTab; ct.cl('gb.st'); } /*if(clrObj.className=='tabbrowser-tabs') { clrObj=gBrowser.selectedTab; } */ var clrSat = ct.clrRand(ct.satmin,ct.satmax); //for keeping saturation to match the old static template we need the saturation between 30 and 95;ideally could be min 30; add advanced prefs later var clrLum = ct.clrRand(ct.lummin,ct.lummax); //for keeping saturation to match the old static template we need the luminance between 68 and 78 //7641001910403507 //12646680001161 var randkey = parseInt(Math.random()*100000000000000).toString(); //generate a really random int var tabClr ='hsl('+Math.abs(ct.clrHash(randkey))%360+','+clrSat+'%,'+clrLum+'%)'; ct.cl(tabClr); ct.setColor(clrObj,tabClr); ct.clrSession.setTabValue(clrObj, "ctreadonly", 1); }, showOptions: function() { var features = "chrome,centerscreen,resizable=no,dialog=yes,toolbar,close=no,dependent=yes"; window.openDialog('chrome://clrtabs/content/clrtabsopt.xul','_blank',features); } , setCtPref: function() { clrPrefObserver.register(); var clrprefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try { ct.fadedeg = clrprefs.getIntPref("extensions.clrtabs.fadedeg"); ct.scheme = clrprefs.getIntPref("extensions.clrtabs.scheme"); ct.ctVersion = clrprefs.getCharPref("extensions.clrtabs.firstrun"); ct.txtreverse = clrprefs.getBoolPref("extensions.clrtabs.txtreverse"); ct.enabledomain=clrprefs.getBoolPref("extensions.clrtabs.enabledomain"); ct.colorunmatcheddomain=clrprefs.getBoolPref("extensions.clrtabs.colorunmatcheddomain"); ct.dpref=clrprefs.getCharPref("extensions.clrtabs.dpref"); ct.dpref=ct.dpref.split("`"); ct.standout=clrprefs.getBoolPref("extensions.clrtabs.standout"); ct.adv = clrprefs.getBoolPref("extensions.clrtabs.advanced"); if(ct.adv==false)//satmax,satmin,lummax,lummin; { ct.satmax=100; //clrprefs.setIntPref("extensions.clrtabs.satmax",satmax); ct.satmin=22; //clrprefs.setIntPref("extensions.clrtabs.satmin",satmin); ct.lummax=78; //clrprefs.setIntPref("extensions.clrtabs.lummax",lummax); ct.lummin=68; //clrprefs.setIntPref("extensions.clrtabs.lummin",lummin); ct.sat=61; ct.lum=73; } else { ct.satmax=clrprefs.getIntPref("extensions.clrtabs.satmax"); ct.satmin=clrprefs.getIntPref("extensions.clrtabs.satmin"); ct.lummax=clrprefs.getIntPref("extensions.clrtabs.lummax"); ct.lummin=clrprefs.getIntPref("extensions.clrtabs.lummin"); ct.sat=clrprefs.getIntPref("extensions.clrtabs.sat"); ct.lum=clrprefs.getIntPref("extensions.clrtabs.lum"); } if(clrprefs.getBoolPref("extensions.clrtabs.bgpic")==true) { if(ct.isSeamonkey) { ct.setSeamonkeyContainerBg(true); } else { gBrowser.mTabContainer.style.backgroundImage="url("+clrprefs.getCharPref("extensions.clrtabs.bgpicpath")+")"; gBrowser.mTabContainer.style.backgroundRepeat="repeat"; } } } catch(e) { dump(e); } }, calcTabClr:function(event) { var tab; var clrSat,clrLum,tabClr; if(event) { tab = event.originalTarget; /*ct.cl("\n\n\n"); ct.cl("event.explicitOriginalTarget:\t"+event.explicitOriginalTarget.nodeName ); ct.cl("event.currentTarget:\t"+event.currentTarget.nodeName ); ct.cl("event.originalTarget:\T"+event.originalTarget.nodeName ); ct.cl("event.type:\t"+event.type ); ct.cl("event.view:\t"+event.view ); ct.cl("event.detail:\t"+event.detail ); ct.cl("event.which:\t"+event.which ); if(event.explicitOriginalTarget.nodeName.toLowerCase() == "menuitem") { ct.cl("caught Menuitem"); tEl = event.explicitOriginalTarget; while(tEl.parentNode) { tEl = tEl.parentNode; ct.cl("parent:\t"+tEl.nodeName); } } */ } else { tab = gBrowser.mTabContainer.childNodes[0]; } switch (ct.scheme) { case 0: if(ct.clrSession.getTabValue(tab,"ctreadonly") == 1) { return; } tabClr = ct.tabColors[ct.clr%32]; ct.setColor(tab,tabClr); ct.clr++; break; case 1: if(ct.clrSession.getTabValue(tab,"ctreadonly") == 1) { return; } var oldtabClr=ct.clrSession.getTabValue(tab,"tabClr" ); if(oldtabClr) { tabClr = oldtabClr; } else { clrSat = ct.clrRand(ct.satmin,ct.satmax); //for keeping saturation to match the old static template we need the saturation between 30 and 95;ideally could be min 30; add advanced prefs later clrLum = ct.clrRand(ct.lummin,ct.lummax); //for keeping saturation to match the old static template we need the luminance between 68 and 78 ct.cl("linkedpanel:\t"+tab.getAttribute('linkedpanel')); //tabClr ='hsl('+Math.abs(ct.clrHash(tab.getAttribute('linkedpanel').replace(/panel/,"")))%360+','+clrSat+'%,'+clrLum+'%)'; var randkey = parseInt(Math.random()*100000000000000).toString(); //generate a really random int tabClr ='hsl('+Math.abs(ct.clrHash(randkey))%360+','+clrSat+'%,'+clrLum+'%)'; ct.cl("linkedpanel:\t"+tab.getAttribute('linkedpanel')+"\t"+tabClr+"\t"+randkey); } ct.setColor(tab,tabClr); break; case 2: tab.linkedBrowser.addProgressListener(clrUrlListener, Components.interfaces.nsIWebProgress.NOTIFY_STATE_DOCUMENT); break; case 3:break; } //ct.cl("TabBGColor:"+tabClr); }, setForeColor:function(tab) { if(ct.txtreverse) { rgb = document.defaultView.getComputedStyle(tab, null).getPropertyValue("background-color").toString(); rgb = rgb.replace(/ /g,''); //strip spaces re = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/; rgb.toLowerCase(); re.exec(rgb); r = RegExp.$1 g = RegExp.$2; b = RegExp.$3; tab.style.setProperty('color','rgb('+(255-parseInt(r))+','+(255-parseInt(g))+','+(255-parseInt(b))+')','important'); } else { tab.style.setProperty('color','rgb(0,0,0)','important'); } }, reverseTxtColor:function() { try { var tblength = gBrowser.mPanelContainer.childNodes.length; for(var loop = 0; loop < tblength; loop++) { try { ct.setForeColor(gBrowser.mTabContainer.childNodes[loop]); } catch(e) { Components.utils.reportError(e); } } } catch(e) { dump("\nColorfulTabs Log: Error: " + e); } }, setColor:function(tab, tabClr) { tab.style.setProperty('background-color',tabClr,'important'); ct.setForeColor(tab); ct.clrSession.setTabValue(tab, "tabClr", tabClr); //ct.setMIcolor(tab,tabClr); ct.fadeAllTabs(); }, setMIcolor:function(tab, tabClr) { try { tab.mCorrespondingMenuitem.style.setProperty('background-color',tabClr,'important'); } catch(e){ct.cl(e);} }, getMovedTab:function(event) { //ct.cl("TabMove"); if(event.originalTarget.nodeName == "tab" || event.originalTarget.nodeName == "xul:tab") { var myClr = ct.clrSession.getTabValue(event.originalTarget, "tabClr"); ct.setColor(event.originalTarget,myClr) } }, restoreTabClr:function(event) { var tab = event.originalTarget; var myClr = ct.clrSession.getTabValue(tab, "tabClr"); //ct.cl("restoring Tabcolorvalue"+(ss.getTabValue(tab, "tabClr")?1:0)); if(myClr) //if { ct.setColor(tab,myClr) } }, clrHash:function(clrString) { var hash = ct.SHA256(clrString); var iClr, clrConst = 5381;// var clrString = ; for (iClr = 0; iClr < hash.length; iClr++) { clrConst = ((clrConst << 5) + clrConst) + hash.charCodeAt(iClr); } return clrConst; }, clrRand:function(min,max) { return (Math.round(Math.random()*(max-min)))+min; }, tabrem:function(event) { //ct.cl("TabClose"); var tab = event.originalTarget.nodeName; }, cl:function(msg) { if(ct.ctdebug) dump("\ncl:\t"+msg); }, fadeNode:function(node,opacity) { node.style.setProperty('opacity',opacity,'important'); }, fadeAllTabs:function(event) { //ct.cl("TabSelect") ct.setTaBottomClr(); try { var tblength = gBrowser.mPanelContainer.childNodes.length; for(var loop = 0; loop < tblength; loop++) { try { if(ct.fadedeg) { for(var count=0;count< gBrowser.mTabContainer.childNodes.length;count++) ct.fadeNode(gBrowser.mTabContainer.childNodes[count],(10-ct.fadedeg)/10); } else { for(var count=0;count<gBrowser.mTabContainer.childNodes.length;count++) { ct.fadeNode(gBrowser.mTabContainer.childNodes[count],'1'); } } } catch(e) { Components.utils.reportError(e); } } } catch(e) { dump("\nColorfulTabs Log: Error: " + e); } if(ct.standout) { try { for(var count=0;count< gBrowser.mTabContainer.childNodes.length;count++) gBrowser.mTabContainer.childNodes[count].className = gBrowser.mTabContainer.childNodes[count].className.replace(" standout",""); } catch(e) { ct.cl("\nColorfulTabs Error in function ct.fadeAllTabs: "+e+". standout "+count2); } gBrowser.selectedTab.className=gBrowser.selectedTab.className+" standout"; } /*else { for(var count=0;count< gBrowser.mTabContainer.childNodes.length;count++) { if(gBrowser.mTabContainer.childNodes[count].className.match(" standout")) { gBrowser.mTabContainer.childNodes[count].className.replace(" standout","") } } } */ if(ct.fadedeg) { try { ct.fadeNode(gBrowser.selectedTab,"1"); } catch(e) { dump("\nColorfulTabs Error in function ct.fadeAllTabs: "+e+". Iteration failed on value "+count2); } } }, setTaBottomClr:function() { var ss = new Array(); var ss = document.styleSheets; for (var i=0; i < ss.length; i++) { switch (ss[i].href) { case 'chrome://clrtabs/skin/clrtabs.css': case 'chrome://clrtabs/skin/clrtabs-seamonkey.css': var clrSS = ss[i]; break; } } try { clrSS.cssRules[2].style.setProperty ('background-color',document.defaultView.getComputedStyle(gBrowser.selectedTab, null).getPropertyValue("background-color").toString() ,'important' ); } catch(e) { dump("\nctlog:\terror in function ct.setTaBottomClr "+e); } }, setSeamonkeyContainerBg:function(yes) { var clrPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getCharPref("extensions.clrtabs.bgpicpath"); //var clrPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getCharPref("extensions.clrtabs.bgpicpath"); var ss = new Array(); var ss = document.styleSheets; ct.cl("attempting function") for (var i=0; i < ss.length; i++) { switch (ss[i].href) { case 'chrome://clrtabs/skin/clrtabs-seamonkey.css': var clrSS = ss[i]; break; } } try { if(yes) { //alert(clrSS.cssRules[3].selectorText) clrSS.cssRules[3].style.setProperty('background-image',"url("+clrPrefs+")" ,'important' ); clrSS.cssRules[3].style.setProperty('background-repeat', "repeat","important"); } else { clrSS.cssRules[3].style.setProperty('background-image',"url('chrome://clrtabs/skin/seamonkey-bg.png')" ,'important' ); clrSS.cssRules[3].style.setProperty('background-repeat',"repeat-x" ,'important' ); } } catch(e) { dump("\nctlog:\terror in function ct.setSeamonkeyContainerBg "+e); } }, effectMouseIn:function(event) { if (event.target.nodeName != "xul:tab" && event.target.nodeName != "tab") { return; } if((event.target.getAttribute('selected')=='true') ||(event.target.nodeName=='xul:tabs')) return; try { ct.fadeNode(event.target,1); } catch(e) { dump("\nColorfulTabs Error in function ct.effectMouseIn: "+e+". Iteration failed on value "+count2); } }, effectMouseOut:function(event) { if (event.target.nodeName != "xul:tab" && event.target.nodeName != "tab") { return; } if((event.target.getAttribute('selected')=='true') ||(event.target.nodeName=='xul:tabs')) return; try { ct.fadeNode(event.target,(10-ct.fadedeg)/10); } catch(e) { } }, setUserClr:function() { var clrObj = document.popupNode; if(clrObj.className=='tabbrowser-tabs') { clrObj=gBrowser.selectedTab; } var params = {inn:{oldColor:document.defaultView.getComputedStyle(clrObj, null).getPropertyValue("background-color"), enabled:0}, out:null}; window.openDialog('chrome://clrtabs/content/clrpkr.xul','_blank','modal,chrome,centerscreen,resizable=no, dialog=yes,close=no', params).focus(); if (params.inn.enabled) { var clrNewColor = params.inn.oldColor; ct.setColor(clrObj, clrNewColor.toString()); ct.clrSession.setTabValue(clrObj, "ctreadonly", 1); //ct.setTaBottomClr(); } else { } }, SHA256:function(s) { var chrsz = 8; var hexcase = 0; function safe_add (x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); } function S (X, n) { return ( X >>> n ) | (X << (32 - n)); } function R (X, n) { return ( X >>> n ); } function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); } function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); } function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); } function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); } function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); } function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); } function core_sha256 (m, l) { var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2); var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19); var W = new Array(64); var a, b, c, d, e, f, g, h, i, j; var T1, T2; m[l >> 5] |= 0x80 << (24 - l % 32); m[((l + 64 >> 9) << 4) + 15] = l; for ( var i = 0; i<m.length; i+=16 ) { a = HASH[0]; b = HASH[1]; c = HASH[2]; d = HASH[3]; e = HASH[4]; f = HASH[5]; g = HASH[6]; h = HASH[7]; for ( var j = 0; j<64; j++) { if (j < 16) W[j] = m[j + i]; else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]); T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]); T2 = safe_add(Sigma0256(a), Maj(a, b, c)); h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); } HASH[0] = safe_add(a, HASH[0]); HASH[1] = safe_add(b, HASH[1]); HASH[2] = safe_add(c, HASH[2]); HASH[3] = safe_add(d, HASH[3]); HASH[4] = safe_add(e, HASH[4]); HASH[5] = safe_add(f, HASH[5]); HASH[6] = safe_add(g, HASH[6]); HASH[7] = safe_add(h, HASH[7]); } return HASH; } function str2binb (str) { var bin = Array(); var mask = (1 << chrsz) - 1; for(var i = 0; i < str.length * chrsz; i += chrsz) { bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32); } return bin; } function Utf8Encode(string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } function binb2hex (binarray) { var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var str = ""; for(var i = 0; i < binarray.length * 4; i++) { str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF); } return str; } s = Utf8Encode(s); return binb2hex(core_sha256(str2binb(s), s.length * chrsz)); }, BrowseSGen:function() { gBrowser.selectedTab = gBrowser.addTab('http://www.binaryturf.com'); }, wOpen:function(url) { var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(); var wmi = wm.QueryInterface(Components.interfaces.nsIWindowMediator); var win = wmi.getMostRecentWindow("navigator:browser"); if (win) { var tab = win.gBrowser.addTab(url); win.gBrowser.selectedTab = tab; return; } }, clrtabsUnload: function() { clrPrefObserver.unregister(); } } var clrPrefObserver = { register: function() { var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); this._branch = prefService.getBranch("extensions.clrtabs."); this._branch.QueryInterface(Components.interfaces.nsIPrefBranch2); this._branch.addObserver("", this, false); }, unregister: function() { if(!this._branch) return; this._branch.removeObserver("", this); }, observe: function(aSubject, aTopic, aData) { if(aTopic != "nsPref:changed") return; var prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.clrtabs."); // switch (aData) { case "fadedeg": ct.fadedeg = prefBranch.getIntPref("fadedeg"); ct.fadeAllTabs(); break; case "scheme": ct.scheme = prefBranch.getIntPref("scheme"); ct.showRecolor(); break; case "menu": ct.initTabcontext(); ct.showRecolor(); break; case "enabledomain": ct.enabledomain=prefBranch.getBoolPref("enabledomain"); break; case "dpref": ct.dpref=prefBranch.getCharPref("dpref"); ct.dpref=ct.dpref.split("`"); break; case "standout": ct.standout=prefBranch.getBoolPref("standout"); if(ct.standout) { gBrowser.selectedTab.className = gBrowser.selectedTab.className+" standout"; } else { for(var count=0;count< gBrowser.mTabContainer.childNodes.length;count++) { if(gBrowser.mTabContainer.childNodes[count].className.match(" standout")) { gBrowser.mTabContainer.childNodes[count].className=gBrowser.mTabContainer.childNodes[count].className.replace(" standout","") } } } break; case "advanced": ct.adv=prefBranch.getBoolPref("advanced"); if(ct.adv==false) { ct.satmax=95; ct.satmin=30; ct.lummax=78; ct.lummin=68; ct.sat=60; ct.lum=73; } else { ct.satmax=prefBranch.getIntPref("satmax"); ct.satmin=prefBranch.getIntPref("satmin"); ct.lummax=prefBranch.getIntPref("lummax"); ct.lummin=prefBranch.getIntPref("lummin"); ct.sat=prefBranch.getIntPref("sat"); ct.lum=prefBranch.getIntPref("lum"); } break; case "satmax": ct.satmax=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("extensions.clrtabs.satmax"); break; case "satmin": ct.satmin=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("extensions.clrtabs.satmin"); break; case "lummax": ct.lummax=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("extensions.clrtabs.lummax"); break; case "lummin": ct.lummin=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("extensions.clrtabs.lummin"); break; case "sat": ct.sat=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("extensions.clrtabs.sat"); break; case "lum": ct.lum=Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getIntPref("extensions.clrtabs.lum"); break; case "bgpicpath": if(ct.isSeamonkey) { ct.setSeamonkeyContainerBg(true); } else { gBrowser.mTabContainer.style.backgroundImage="url("+prefBranch.getCharPref("bgpicpath")+")"; gBrowser.mTabContainer.style.backgroundRepeat="repeat"; } break; case "txtreverse": ct.txtreverse = prefBranch.getBoolPref("txtreverse"); ct.reverseTxtColor(); break; case "bgpic": //ct.cl("bgpic changed"); var togglePic = prefBranch.getBoolPref("bgpic"); //ct.cl("bgpic is= "+ togglePic); ct.cl("bgpic changed") if(togglePic) { if(ct.isSeamonkey) { ct.cl("this is seamonkey") ct.setSeamonkeyContainerBg(true); } else { ct.cl("enabling in firefox") gBrowser.mTabContainer.style.backgroundImage="url("+prefBranch.getCharPref("bgpicpath")+")"; gBrowser.mTabContainer.style.backgroundRepeat="repeat"; } } else { if(ct.isSeamonkey) { ct.setSeamonkeyContainerBg(false); } else { //not seamonkey ct.cl("disabling in firefox") gBrowser.mTabContainer.style.backgroundImage="none"; gBrowser.mTabContainer.style.backgroundRepeat="no-repeat"; } } break; } } } var clrUrlListener = { QueryInterface: function(aIID) { if (aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) return this; throw Components.results.NS_NOINTERFACE; }, onLocationChange: function(aProgress, aRequest, aURI) { var doc = aProgress.DOMWindow.document; var tab = gBrowser.mTabs[gBrowser.getBrowserIndexForDocument(doc)]; if(ct.clrSession.getTabValue(tab,"ctreadonly") == 1) { return; } var tabClr; try { var host = tab.linkedBrowser.contentDocument.location.host; var url = tab.linkedBrowser.contentDocument.location; var testWWW = /^www\.(.+\..+)$/.exec(host); //tabClr = 'hsl('+Math.abs(ct.clrHash(host))%360+','+60+'%,'+73+'%)'; //use fixed values for sat and lum for host. to do - will use userprefs later for them - var colored = 0; if(ct.enabledomain) { for (i=0;i<ct.dpref.length;i++) { if(host.match(ct.dpref[i].split("~")[0])) { tabClr = ct.dpref[i].split("~")[1]; colored = 1;//set the flag that the domain got a color } } if(colored == 0) //if the domain didn't get a match, (preference - color unmatched domains)generate a default color? { //if(ct.adv == true) // { tabClr = 'hsl('+Math.abs(ct.clrHash(host))%360+','+ct.sat+'%,'+ct.lum+'%)'; // } //else // { // tabClr = 'hsl('+Math.abs(ct.clrHash(host))%360+','+60+'%,'+73+'%)'; // } } } else { //if(ct.adv == true) // { tabClr = 'hsl('+Math.abs(ct.clrHash(host))%360+','+ct.sat+'%,'+ct.lum+'%)'; // } //else // { // tabClr = 'hsl('+Math.abs(ct.clrHash(host))%360+','+60+'%,'+73+'%)'; // } } ct.setColor(tab,tabClr); } catch (e) { var host = "about:blank"; // might not always be true, but this makes us ignore it. tabClr ='-moz-dialog'; //use fixed values for sat and lum for host. to do - will use userprefs later for them } }, // For definitions of the remaining functions see XulPlanet.com onStateChange:function() { return 0;}, onProgressChange: function() { return 0;}, onStatusChange: function() { return 0;}, onSecurityChange: function() { return 0;}, onLinkIconAvailable: function() { return 0;} }